package blocodenotas;


/**
 * Programador.: Juliano Barbiero Dorigão
 * Bloco de Notas
 * Ínicio.: 14.07.2013
 * Versão.: 0.0
 * @author Juliano Dorigão
 */
 
 /**
  * Importando as classes necessárias
  */
import java.io.*;
import javax.swing.*;
//import java.awt.*;
//import java.awt.event.*;
import java.util.*;

import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyChangeListener;
import java.util.Locale;
import java.util.Vector;
import java.io.Serializable;
import javax.accessibility.*;
 
/**
 * Classe geral da aplicação
 */
 public class blocodenotas extends JFrame
 {
 	private static blocodenotas janela;
	private JPanel posicao_1, posicao_2, posicao_3;
 	private JTextArea texto;
 	private JTextField linha_1, coluna_2;
 	private JScrollPane scroll;
 	private static int linha = 1, coluna = 1;
 	private String localiza = ""; 	
 	//private Boolean QueLinhaStatus = false;	
 	//private Boolean barraStatatus = true;
 	String pasta = null, titulo = "Sem Título", nomearq = "";
 		

 	public blocodenotas()
	{
		super("Sem Título - Bloco de Notas");
		
		//Poem uma imagem na barra de titulo...
		//Image icone = Toolkit.getDefaultToolkit().getImage("icone.gif");
  		//setIconImage(icone);
  		
  		Container container = getContentPane();
 		
 		//Monta o Display do Bloco de Notas
 		posicao_1 = new JPanel(new BorderLayout());
  		texto = new JTextArea();
  		
  		scroll = new JScrollPane(texto);
  		posicao_1.add(scroll, "Center");
  		posicao_2 = new JPanel(new BorderLayout());
  		posicao_3 = new JPanel(new GridLayout());
  		linha_1 = new JTextField("Linha: " + linha + "     ");
  		linha_1.setSize(100, 20);
  		linha_1.setEditable(false);
  		coluna_2 = new JTextField("Coluna: " + coluna + "     ");
  		coluna_2.setSize(100, 20);
  		coluna_2.setEditable(false);
  		posicao_3.add(linha_1, "NORTH");
  		posicao_3.add(coluna_2);
  		posicao_2.add(posicao_3, "West");
  		posicao_1.add(posicao_2, "South");
  		container.add(posicao_1);
  		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
 			
 		//Configuração da Tela
		setSize( 600, 500 );
		setLocation(200, 100);		
		setVisible( true );		

		//Barra Menu	
 		JMenuBar barra = new JMenuBar();
 			
 		
 		//------------Menu Arquivo------------------		
			JMenu arquivo = new JMenu("Arquivo");
			barra.add(arquivo);
			arquivo.setMnemonic('A');
		
			//Itens do menu Arquivo  
			JMenuItem novo = new JMenuItem("Novo                                 Ctrl+N"); 
			arquivo.add(novo);				
			JMenuItem abrir = new JMenuItem("Abrir                                 Ctrl+O"); 
			arquivo.add(abrir);
 			JMenuItem salvar = new JMenuItem("Salvar                               Ctrl+S"); 
			arquivo.add(salvar);
			final JMenuItem salvarcomo = new JMenuItem("Salvar Como..."); 
			arquivo.add(salvarcomo);
			arquivo.addSeparator();
			final JMenuItem sair = new JMenuItem("Sair                                   Alt+F4"); 
			arquivo.add(sair);
	
		//-------------Menu Editar-------------------	
			JMenu editar = new JMenu("Editar");
			barra.add(editar);
			editar.setMnemonic('E');
			//Itens do menu Editar  
			JMenuItem recortar = new JMenuItem("Recortar                         Ctrl+X"); 
			editar.add(recortar);
			JMenuItem copiar = new JMenuItem("Copiar                             Ctrl+C"); 
			editar.add(copiar);
			JMenuItem colar = new JMenuItem("Colar                               Ctrl+V"); 
			editar.add(colar);   
			final JMenuItem localizar = new JMenuItem("Localizar...                     Ctrl+F"); 
			editar.add(localizar);
			JMenuItem locaprox = new JMenuItem("Localizar próxima        F3"); 
			editar.add(locaprox);
			JMenuItem seltudo = new JMenuItem("Selecionar tudo            Ctrl+A"); 
			editar.add(seltudo);
			JMenuItem horadata = new JMenuItem("Hora/data                        F5"); 
			editar.add(horadata);
		
		
		//-------------Menu Formatar-------------------
			JMenu formatar = new JMenu("Formatar");
			barra.add(formatar);
			formatar.setMnemonic('F');
		
			JMenuItem quebralinha = new JMenuItem("Quebra automática de linha"); 
			formatar.add(quebralinha);
		
		
		//---------------Menu Exibir--------------------	
 			JMenu exibir = new JMenu("Exibir");
			barra.add(exibir);
			exibir.setMnemonic('x');
		
			JMenuItem Bstatus = new JMenuItem("Barra de status"); 
			exibir.add(Bstatus);
		
		
		//---------------Menu Ajuda--------------------
			JMenu ajuda = new JMenu("Ajuda");
			barra.add(ajuda);
			ajuda.setMnemonic('j');
	
			JMenuItem sobre = new JMenuItem("Sobre o Bloco de notas"); 
			ajuda.add(sobre);
			
			//Deixa a barra visivel		
 			setJMenuBar(barra); 
 			
 			/**
 			 * Função Abrir
 			 */
 			abrir.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
 					
 					JFileChooser jfc = new JFileChooser(); 
    				int returnVal = jfc.showOpenDialog(texto); 
    				
    				if (returnVal == JFileChooser.APPROVE_OPTION) 
    				{ 
    					//Recebe o nome do arquivo que abriu
    					nomearq = jfc.getSelectedFile().getPath();     					
    					try
    					{
    						
        					FileReader a = new FileReader(nomearq);
        					try
        					{
		       					BufferedReader conteudo = new BufferedReader(a); 	
		       					
        	   					String frase = "";
        	   					String aux = "";
        						while( (frase=conteudo.readLine()) != null ) 
        						{
        							aux+= frase + "\n";
        						}
        						texto.setText(aux);
        						        						       						
        					}
        					catch (IOException e) 
        					{  
            					e.printStackTrace(); 
        					}
        				
        				} 
        				catch (FileNotFoundException e) 
        				{  
            				e.printStackTrace(); 
        				} 
    				} 
				}
 			});
 			
 			/**
 			 * Função Salvar
 			 */
 			salvar.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					if(nomearq.equals(""))
					{
						salvarcomo.doClick();
					}
					else
					{
						try
						{
							FileWriter arq=new FileWriter(nomearq);
							try
							{
								BufferedWriter  saida  =  new   BufferedWriter ( arq );
  								saida.write(texto.getText());  								
  								saida.close();
							}
							catch ( IOException e )
							{
								e.printStackTrace();
							}	
						}
						catch ( IOException e )
						{	
							e.printStackTrace();
						}		
					}
				}
 			});
 			
 			/**
 			 * Função Salvar Como
 			 */
 			salvarcomo.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					JFileChooser jfc = new JFileChooser();
					int ret = jfc.showSaveDialog(null);//abre a caixa de dialogo
					if(ret==JFileChooser.APPROVE_OPTION)
					{
						nomearq= jfc.getSelectedFile().getAbsolutePath();
						try
						{
							FileWriter arq=new FileWriter(nomearq);
							try
							{
								BufferedWriter  saida  =  new   BufferedWriter ( arq );
  								saida.write(texto.getText());
  								saida.close();
							}
							catch ( IOException e )
							{
								e.printStackTrace();
							}	
						}
						catch ( IOException e )
						{	
							e.printStackTrace();
						}	
					}
				}
 			});	
 			
 			/**
 			 * Função Novo
 			 */
 			novo.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					texto.setText(null);
					nomearq = "";
				}
 			});
 			
 			/**
 			 * Função Localizar
 			 */
 			localizar.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
 					//Informa a plavra a ser localizada
					localiza = JOptionPane.showInputDialog(null, "Localizar:");
					
					//Converte a palavra a ser localizada em minuscula
					localiza = localiza.toLowerCase(); 
					
					//A variável 'procurar' receberá a posicao do 1º caracter
					//da palavra que o usuario deseja localizar
    				int procurar = texto.getText().indexOf(localiza);
    				
    				//Recebe o tamanho da palavra a ser localizada
    				int tampalavra=localiza.length();
    				
	  				
	  				//Se a variável 'procurar' for igual a -1, então a palavra
	  				//não está no texto, caso contrário, ele procura e seleciona
	  				if(procurar == -1)
	  				{
	  					JOptionPane.showMessageDialog(null, "Palavra não encontrada");
	  					procurar = 0;
	  				}
	  				else if (procurar != -1)
	  				{
	  					texto.select(procurar, procurar + tampalavra);
	  				}
				}
 			});
 			
 			/**
 			 * Função Localizar Próximo
 			 */
 			locaprox.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
 									
					if(localiza.equals(""))
					{
						localizar.doClick();
					}
					else
					{
						//Converte a palavra a ser localizada em minuscula
						localiza = localiza.toLowerCase(); 
					
						//A variável 'procurar' receberá a posicao do 1º caracter
						//da palavra que o usuario deseja localizar
    					int procurar = texto.getText().lastIndexOf(localiza);
    					
    					//Recebe o tamanho da palavra a ser localizada
    					int tampalavra=localiza.length();
    					
	  					//Se a variável 'procurar' for igual a -1, então a palavra
	  					//não está no texto, caso contrário, ele procura e seleciona
	  					if(procurar == -1)
	  					{
	  						JOptionPane.showMessageDialog(null, "Palavra não encontrada");
	  						procurar = 0;
	  					}
	  					else if (procurar != -1)
	  					{
	  						texto.select(procurar, procurar + tampalavra);
	  					}
	  				}	  				
				}
 			});
 			
 			/**
 			 * Função Copiar
 			 */
 			copiar.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					texto.copy();
				}
 			});
 			
 			/**
 			 * Função Colar
 			 */
 			colar.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					texto.paste();
				}
 			});
 			
 			/**
 			 * Função Recortar
 			 */
 			recortar.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					texto.cut();
				}
 			});
 			
 			/**
 			 * Função Sair
 			 */
 			sair.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
  					if(texto.getText().equals(""))
  					{
   						System.exit(0);
  					}
  					else
  					{
   						int escolha = JOptionPane.showConfirmDialog(null, "Deseja salvar as alterações?", "Bloco de Notas", JOptionPane.YES_NO_CANCEL_OPTION);
   						
   						if (escolha == JOptionPane.YES_OPTION)
   						{
    						salvarcomo.doClick();
    						System.exit(0);
   						}
   						
   						if (escolha == JOptionPane.NO_OPTION)
   						{
    						System.exit(0);
   						}
  					}
 				}
 			});
 			
 			/**
 			 * Função Selecionar Tudo
 			 */
 			seltudo.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					texto.selectAll();	
				}
 			});
 			
 			/**
 			 * Função Quebra Linha
 			 */
 			/**
 			quebralinha.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					if(QueLinhaStatus.equals(true))
					{
						TextArea quebrarlinha = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);
					}
					else
					{
						QueLinhaStatus = true;
					}	
				}
 			});
 			
 			
 			 * Função Barra de Status
 			 */
 			/**
 			Bstatus.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					if(barraStatatus.equals(true))
					{
						barraStatatus = false;
					}
					else
					{
						barraStatatus = true;
					}	
				}
 			});
 			*/
 			
 			/**
 			 * Função Data e Hora
 			 */
 			horadata.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
					Date data = new Date();
 					String data_1 = data.getHours() + ":" + data.getMinutes() + "  " + data.getDate() + "/" + data.getMonth() + "/" + (data.getYear() + "").substring(1);
  					String data_2 = texto.getText().substring(0, texto.getSelectionStart()) + data_1 + texto.getText().substring(texto.getSelectionEnd());
  					texto.setText(data_2);
				}
 			});
 			
 			/**
 			 * Função sobre
 			 */
 			sobre.addActionListener(new ActionListener()                         
 			{
 				public void actionPerformed (ActionEvent event) 
 				{
 					JOptionPane.showMessageDialog(null,  "                  Bloco de Notas\n" 
        									 +"                -------------------------\n"       									 
        									 +"\n:.Programador.:"
        									 +"\nJuliano Barbiero Dorigão"
        									 +"\n\n\n Início......:  14/07/13"
        									 +"\n\n\n------------------------------------------------------------------    "
        									 +"\n                          versão 0.0"
        									 +"\n------------------------------------------------------------------", "Bloco de Notas", JOptionPane.INFORMATION_MESSAGE); 
        		}
        	});
        	
 			/**
 			 * Sair
 			 */
        	addWindowListener(new WindowAdapter()
        	{
        		public void windowClosing(WindowEvent e)
        		{
        			sair.doClick();
        		}
        	});	
     }
    
  /**
   * Informa em que posição (Linha x Coluna)que o cursor está
   */ 	
   /**
 	public void PosLinhaColuna()
    {
  		int posicao = 0;
  		int linha_aux = 0;
  		int coluna_aux = 0;
  		int PosicaoAux = 0;
  		String aux;
  		while (true)
  		{
  			texto.setLineWrap(QueLinhaStatus);
  			posicao_3.setVisible(barraStatatus);
   			if (posicao != texto.getSelectionEnd())
   			{
    			aux = texto.getText().substring(0, texto.getSelectionEnd());
    			while (PosicaoAux != -1)
    			{
     				PosicaoAux = aux.indexOf("\n", PosicaoAux + 1);
     				linha_aux++;
    			}
    			
    			PosicaoAux = (aux.lastIndexOf("\n") != -1 ? aux.lastIndexOf("\n") + 1 : 0);
    			coluna_aux = 1 + aux.substring(PosicaoAux).length();
    			linha = linha_aux;
    			coluna = coluna_aux;
    			linha_1.setText("Linha: " + linha);
    			coluna_2.setText("Coluna: " + coluna);
    			linha_aux = 0;
    			PosicaoAux = 0;
    			posicao = texto.getSelectionEnd();
   			}   			
  		}  		
 	}  	 */	
 }		